package com.spzx.product.helper;

import com.spzx.product.api.domain.vo.CategoryVo;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class CategoryHelper {

    /**
     * 构建三级分类树结构
     * @param categoryVoList 所有分类列表数据
     * @return 构建成树结构的分类数据
     */
    public static List<CategoryVo> buildTree(List<CategoryVo> categoryVoList) {
        List<CategoryVo> oneCategoryList = new ArrayList<>();
        if(!CollectionUtils.isEmpty(categoryVoList)){
            for (CategoryVo categoryVo : categoryVoList) {
                if(categoryVo.getParentId().intValue() == 0){
                    oneCategoryList.add(findChildren(categoryVo,categoryVoList));
                }
            }
        }
        return oneCategoryList;
    }

    /**
     * 递归：找孩子
     *  1.一级分类找二级孩子过程、二级分类找三级分类孩子过程、三级分类找四级分类孩子过程。这都是同类问题
     *  2.三级分类找四级分类时，没有四级分类存在的，递归会结束。存在退出条件。
     * @param categoryVo
     * @param categoryVoList
     * @return
     */
    private static CategoryVo findChildren(CategoryVo categoryVo, List<CategoryVo> categoryVoList) {
        categoryVo.setChildren(new ArrayList<>()); // 给children属性初始化。
        for (CategoryVo category : categoryVoList) {
            if(categoryVo.getId().intValue() == category.getParentId().intValue()){ //找孩子
                categoryVo.getChildren().add(findChildren(category,categoryVoList)); //添加孩子对象时，孩子还需要找孩子  -  递归
            }
        }
        return categoryVo;
    }
}
